'use strict';
/**
 * Created by FreezeSoul on 2016/1/22.
 */
define([
    "app/core/base",
    "../../util",
    "jquery",
    "underscore",
    'JSONParse',
    'loglevel'
], function (Chart, Util, $, _, JSON, log) {

    var property = {
        name: '自动属性演示',
        config: "property",
        option: [
            {
                group: '基础',
                id: '01',
                name: '文本标签(type=text)',
                enable: true,
                type: 'text',
                value: 'content',
                default: 'content',
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:text<br/>赋值类型:字符<br/>赋值名称:value'
            },
            {
                group: '基础',
                id: '013333',
                name: '多行文本标签(type=textarea)',
                enable: true,
                type: 'textarea',
                value: 'content',
                default: 'content',
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:textarea<br/>赋值类型:字符<br/>赋值名称:value'
            },
            {
                group: '基础',
                id: '0144444',
                name: 'JavaScript脚本(type=script)',
                enable: true,
                type: 'script',
                value: '',
                default: '',
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:script<br/>赋值类型:字符<br/>赋值名称:value'
            },
            {
                group: '基础',
                id: '01555555',
                name: '插入样式，控件销毁即移除样式(type=style)',
                enable: false,
                type: 'style',
                value: '',
                default: '',
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:style<br/>赋值类型:字符<br/>赋值名称:value'
            },
            {
                group: '基础',
                id: '02',
                name: '复选框(type=checked)',
                enable: true,
                type: 'checked',
                value: true,
                default: true,
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:checked<br/>赋值类型:布尔<br/>赋值名称:value'
            },
            {
                group: '基础',
                id: '041',
                name: '多选集合(type=list)',
                enable: true,
                type: 'list',
                value: [],
                default: [],
                data: [{
                    value: '0',
                    text: '数据A'
                },
                    {
                        value: '1',
                        text: '数据B'
                    },
                    {
                        value: '2',
                        text: '数据C'
                    }],
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:list<br/>赋值类型:字符集合<br/>赋值名称:value'
            },
            {
                group: '基础',
                id: '03',
                name: '下拉框(type=select)',
                enable: true,
                type: 'select',
                value: '0',
                default: '0',
                data: [
                    {
                        value: '0',
                        text: '数据A'
                    },
                    {
                        value: '1',
                        text: '数据B'
                    },
                    {
                        value: '2',
                        text: '数据C'
                    }
                ],
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:select<br/>赋值类型:字符(对象value值)<br/>赋值名称:value<br/>元数据:data(对象数组)'
            },
            {
                group: '基础',
                id: '04',
                name: '颜色选择(type=color)',
                enable: true,
                type: 'color',
                value: '#FFFFFF',
                default: '#FFFFFF',
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:color<br/>赋值类型:字符(HTML颜色值)<br/>赋值名称:value'
            },
            {
                group: '基础',
                id: '05',
                name: '颜色序列(type=colors)',
                enable: true,
                type: 'colors',
                value: [],
                default: [],
                data: [
                    '#FE8463', '#9BCA63', '#FAD860', '#60C0DD', '#0084C6',
                    '#D7504B', '#C6E579', '#26C0C0', '#F0805A', '#F4E001',
                    '#B5C334'
                ],
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:colors<br/>赋值类型:数组(HTML颜色值数组)<br/>赋值名称:value<br/>默认数据:data(HTML颜色值数组)'
            },
            {
                group: '基础',
                id: '06',
                name: '日期选择(type=date)',
                enable: true,
                type: 'date',
                value: new Date(),
                default: new Date(),
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:date<br/>赋值类型:时间对象<br/>赋值名称:value'
            },
            {
                group: '基础',
                id: '0011',
                name: '资源选择(type=resource)',
                enable: true,
                type: 'resource',
                value: '',
                default: '',
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:resource<br/>赋值类型:字符<br/>赋值名称:value'
            },
            {
                group: '基础',
                id: '07',
                name: '数值选择(type=number)',
                enable: true,
                type: 'number',
                value: 10,
                default: 10,
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:number<br/>赋值类型:数值<br/>赋值名称:value'
            },
            {
                group: '基础',
                id: '0777',
                name: 'Padding/Margin选择(type=padding)',
                enable: true,
                type: 'padding',
                value: [0, 0, 0, 0],
                default: [0, 0, 0, 0],
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:padding<br/>赋值类型:Padding/Margin 数值数组<br/>赋值名称:value'
            },
            {
                group: '事件',
                id: '98010101',
                name: '绑定事件(type=pageSelect)',
                enable: true,
                type: 'pageSelect',
                value: '',
                default: '',
                tooltip: '字段说明:<br/>属性类型:pageSelect，用于页面选择'
            },
            {
                group: '基础',
                id: '08',
                name: '序列绑定(type=seriesBinding)',
                enable: true,
                type: 'seriesBinding',
                dataset: '',
                dimension: {},
                measure: {},
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:seriesBinding<br/>赋值类型:对象<br/>赋值名称:dataset,dimension,measure(数据集编码,维度绑定对象,度量绑定对象)<br/>绑定对象格式:{ColumnCaption: 字段标题, ColumnCode: 字段编码, ColumnName: 数据列名称}'
            },
            {
                group: '基础',
                id: '081',
                name: '文本绑定(type=textBinding)',
                enable: true,
                type: 'textBinding',
                dataset: '',
                ctype: 'all',//列类型，支持 all,dimension,measure
                column: {},
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:textBinding<br/>赋值类型:对象<br/>赋值名称:dataset,column(数据集编码,列绑定对象)<br/>绑定对象格式:{ColumnCaption: 字段标题, ColumnCode: 字段编码, ColumnName: 数据列名称}'
            },
            {
                group: '基础',
                id: '09',
                name: '排序绑定(type=sortBinding)',
                enable: true,
                type: 'sortBinding',
                dataset: '',
                columns: [],
                link: '连接属性，同时支持function函数',
                tooltip: '字段说明：<br/>属性类型:sortBinding<br/>赋值类型:对象数组<br/>赋值名称:dataset,columns(数据集编码,列绑定对象数组)<br/>绑定对象格式:{ColumnCaption: 字段标题, ColumnCode: 字段编码, ColumnName: 数据列名称}'
            },
            {
                group: '事件',
                id: '09999',
                name: '绑定事件(type=pivotEvent)',
                enable: true,
                type: 'pivotEvent',
                value: {
                    Event: "SeriesClick",
                    Params: [
                        {Value: "SeriesName", Name: "序列名称"},
                        {Value: "Dimension", Name: "序列维度值"},
                        {Value: "Measure", Name: "序列度量值"}
                    ]
                },
                tooltip: '字段说明:<br/>属性类型:pivotEvent，用于指标事件逻辑'
            },
            {
                group: '高级',
                id: '10',
                name: '分组控件(type=group)',
                type: 'group',
                items: [],
                option: [
                    {
                        id: '0901',
                        name: '文本标签(type=text)',
                        enable: true,
                        type: 'text',
                        value: 'content',
                        default: 'content',
                        link: '连接属性',
                        tooltip: '参见外部描述'
                    },
                    {
                        id: '0902',
                        name: '序列绑定(type=seriesBinding)',
                        enable: true,
                        type: 'seriesBinding',
                        dataset: '',
                        dimension: {},
                        measure: {},
                        link: '连接属性',
                        tooltip: '参见外部描述'
                    }
                ],
                link: '连接属性',
                tooltip: '字段说明:<br/>分组控件，支持动态扩展，内部可增加支持的类型属性'
            },
            {
                group: '高级2',
                id: '20',
                name: '分组控件(type=group)',
                type: 'group',
                items: [],
                option: [
                    {
                        id: '1101',
                        name: '文本标签(type=text)',
                        enable: true,
                        type: 'text',
                        value: 'content',
                        default: 'content',
                        link: function (option) {
                            log.debug("Group Inner Link Function");
                            log.debug(option);
                        },
                        tooltip: '参见外部描述'
                    },
                    {
                        id: '1102',
                        name: '序列绑定(type=seriesBinding)',
                        enable: true,
                        type: 'seriesBinding',
                        dataset: '',
                        dimension: {},
                        measure: {},
                        link: function (option) {
                            log.debug("Group Inner Link Function");
                            log.debug(option);
                        },
                        tooltip: '参见外部描述'
                    }
                ],
                link: function (option) {
                    log.debug("Group Link Function");
                    log.debug(option);
                },
                tooltip: '字段说明:<br/>分组控件，支持动态扩展，内部可增加支持的类型属性'
            }
        ],
        MapOption: function (option) {
            Util.linkOption(this.option, option);
        }
    };

    var test = Chart.extend({
        constructor: function (layout) {
            this._layout = layout;
            this._element = null;
            this._container = null;
            this._option = {
                Binding: [],
                Events: [],
                Extend: $.extend(true, {}, property),
                Option: {}
            };
        },
        init: function (element) {
            try {
                this._container = element;
            } catch (e) {
                log.error(e);
            }
        },
        _render: function () {
            $(this._container).empty();
            return $("<div/>");
        },
        example: function () {
            try {
                this._element = this._render();
            } catch (e) {
                log.error(e);
            }
        },
        _readProperty: function () {
            try {
                if (!this._option.Extend) return;
                Util.deepMapOption(property, this._option.Extend, this._option.Option);
            } catch (e) {
                log.error(e);
            }
        },
        setData: function (data) {
            try {
                this._readProperty();
                this._element = this._render();
            } catch (e) {
                log.error(e);
            }
        },
        setOption: function (option) {
            try {
                return this._option = $.extend(true, {}, option);
            } catch (e) {
                log.error(e);
            }
        },
        getOption: function () {
            return this._option;
        },
        setTheme: function (theme) {
            try {
            } catch (e) {
                log.error(e);
            }
        },
        resize: function () {
            try {
            } catch (e) {
                log.error(e);
            }
        },
        showLoading: function () {
            try {
                if (this._layout && this._layout.showLoading) {
                    this._layout.showLoading(this);
                }
            } catch (e) {
                log.error(e);
            }
        },
        hideLoading: function () {
            try {
                if (this._layout && this._layout.hideLoading) {
                    this._layout.hideLoading(this);
                }
            } catch (e) {
                log.error(e);
            }
        },
        dispose: function () {
            try {
                $(this._element).remove();
            } catch (e) {
                log.error(e);
            }
        },
        getChart: function () {
            return this._element;
        }
    });

    return {
        Chart: test,
        Property: property
    };
});